package model

import (
	"time"
)

// Agent 座席模型
type Agent struct {
	ID              string      `json:"id" gorm:"primaryKey"`
	Username        string      `json:"username" gorm:"uniqueIndex"`
	Password        string      `json:"-" gorm:"size:255"` // 密码不返回给前端
	FullName        string      `json:"full_name" gorm:"size:255"`
	Phone           string      `json:"phone" gorm:"size:50"`
	Email           string      `json:"email" gorm:"size:255"`
	Extension       string      `json:"extension" gorm:"size:20"`
	DepartmentID    string      `json:"department_id" gorm:"size:50"`
	TeamID          string      `json:"team_id" gorm:"size:50"`
	SupervisorID    string      `json:"supervisor_id" gorm:"size:50"`
	Status          AgentStatus `json:"status" gorm:"default:'offline'"`
	LoginTime       *time.Time  `json:"login_time"`
	LogoutTime      *time.Time  `json:"logout_time"`
	LastActivity    *time.Time  `json:"last_activity"`
	CurrentCallID   string      `json:"current_call_id" gorm:"size:100"`
	AvailableTime   int         `json:"available_time" gorm:"default:0"`    // 可用时长（秒）
	BusyTime        int         `json:"busy_time" gorm:"default:0"`         // 忙碌时长（秒）
	BreakTime       int         `json:"break_time" gorm:"default:0"`        // 休息时长（秒）
	WrapupTime      int         `json:"wrapup_time" gorm:"default:0"`       // 事后处理时长（秒）
	TotalCalls      int         `json:"total_calls" gorm:"default:0"`       // 总接通话次数
	TotalTalkTime   int         `json:"total_talk_time" gorm:"default:0"`   // 总通话时长（秒）
	AverageTalkTime int         `json:"average_talk_time" gorm:"default:0"` // 平均通话时长（秒）
	ACDEnabled      bool        `json:"acd_enabled" gorm:"default:true"`    // 是否启用ACD分配
	AutoAnswer      bool        `json:"auto_answer" gorm:"default:false"`   // 是否自动接听
	SkillLevels     []SkillLevel `json:"skill_levels" gorm:"foreignKey:AgentID"`
	CreatedAt       time.Time   `json:"created_at"`
	UpdatedAt       time.Time   `json:"updated_at"`
}

// SkillLevel 座席技能等级
type SkillLevel struct {
	ID       string  `json:"id" gorm:"primaryKey"`
	AgentID  string  `json:"agent_id" gorm:"index"`
	SkillID  string  `json:"skill_id" gorm:"index"`
	Level    int     `json:"level" gorm:"default:1"` // 1-5，数字越大技能越高
	Skill    Skill   `json:"skill" gorm:"foreignKey:SkillID"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// AgentStatus 座席状态枚举
type AgentStatus string

const (
	AgentStatusOffline   AgentStatus = "offline"    // 离线
	AgentStatusLoggedIn  AgentStatus = "logged_in"  // 已登录
	AgentStatusAvailable AgentStatus = "available"  // 可接电话
	AgentStatusBusy      AgentStatus = "busy"       // 通话中
	AgentStatusOnBreak   AgentStatus = "on_break"   // 休息中
	AgentStatusWrapup    AgentStatus = "wrapup"     // 事后处理
)

// Department 部门模型
type Department struct {
	ID          string    `json:"id" gorm:"primaryKey"`
	Name        string    `json:"name" gorm:"size:255"`
	Description string    `json:"description" gorm:"size:1000"`
	ManagerID   string    `json:"manager_id" gorm:"size:50"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

// Team 团队模型
type Team struct {
	ID           string    `json:"id" gorm:"primaryKey"`
	Name         string    `json:"name" gorm:"size:255"`
	Description  string    `json:"description" gorm:"size:1000"`
	DepartmentID string    `json:"department_id" gorm:"size:50"`
	LeaderID     string    `json:"leader_id" gorm:"size:50"`
	CreatedAt    time.Time `json:"created_at"`
	UpdatedAt    time.Time `json:"updated_at"`
}

// AgentActivity 座席活动记录
type AgentActivity struct {
	ID           string      `json:"id" gorm:"primaryKey"`
	AgentID      string      `json:"agent_id" gorm:"index"`
	ActivityType string      `json:"activity_type" gorm:"size:50"` // login, logout, status_change, call_start, call_end
	Status       AgentStatus `json:"status" gorm:"size:50"`
	CallID       string      `json:"call_id" gorm:"size:100"`
	StartTime    time.Time   `json:"start_time"`
	EndTime      *time.Time  `json:"end_time"`
	Duration     int         `json:"duration" gorm:"default:0"` // 持续时间（秒）
	Notes        string      `json:"notes" gorm:"size:1000"`
}

// AgentSettings 座席设置
type AgentSettings struct {
	ID               string `json:"id" gorm:"primaryKey"`
	AgentID          string `json:"agent_id" gorm:"uniqueIndex"`
	AutoAnswer       bool   `json:"auto_answer" gorm:"default:false"`
	PlayRingTone     bool   `json:"play_ring_tone" gorm:"default:true"`
	PopupCallInfo    bool   `json:"popup_call_info" gorm:"default:true"`
	ShowWallboard    bool   `json:"show_wallboard" gorm:"default:true"`
	DefaultWrapupTime int   `json:"default_wrapup_time" gorm:"default:60"` // 默认事后处理时间（秒）
	Language         string `json:"language" gorm:"size:10;default:'zh-CN'"`
	Theme            string `json:"theme" gorm:"size:20;default:'light'"`
	UpdatedAt        time.Time `json:"updated_at"`
}

// AgentStatistics 座席统计数据
type AgentStatistics struct {
	ID                     string    `json:"id" gorm:"primaryKey"`
	AgentID                string    `json:"agent_id" gorm:"index"`
	Date                   time.Time `json:"date" gorm:"index"`
	LoginCount             int       `json:"login_count" gorm:"default:0"`
	TotalLoginTime         int       `json:"total_login_time" gorm:"default:0"` // 总登录时长（秒）
	AvailableTime          int       `json:"available_time" gorm:"default:0"`  // 可用时长（秒）
	BusyTime               int       `json:"busy_time" gorm:"default:0"`       // 忙碌时长（秒）
	BreakTime              int       `json:"break_time" gorm:"default:0"`      // 休息时长（秒）
	WrapupTime             int       `json:"wrapup_time" gorm:"default:0"`     // 事后处理时长（秒）
	InboundCalls           int       `json:"inbound_calls" gorm:"default:0"`   // 呼入电话数
	OutboundCalls          int       `json:"outbound_calls" gorm:"default:0"`  // 呼出电话数
	TotalCalls             int       `json:"total_calls" gorm:"default:0"`     // 总通话数
	AnsweredCalls          int       `json:"answered_calls" gorm:"default:0"`  // 已接电话数
	MissedCalls            int       `json:"missed_calls" gorm:"default:0"`    // 未接电话数
	AbandonedCalls         int       `json:"abandoned_calls" gorm:"default:0"` // 放弃电话数
	TotalTalkTime          int       `json:"total_talk_time" gorm:"default:0"` // 总通话时长（秒）
	AverageTalkTime        int       `json:"average_talk_time" gorm:"default:0"` // 平均通话时长（秒）
	TotalAfterCallWorkTime int       `json:"total_after_call_work_time" gorm:"default:0"` // 总事后处理时间（秒）
	CallTransferCount      int       `json:"call_transfer_count" gorm:"default:0"` // 转接电话数
	ConferenceCount        int       `json:"conference_count" gorm:"default:0"` // 会议次数
	SatisfactionScore      float64   `json:"satisfaction_score" gorm:"default:0"` // 满意度评分
	CreatedAt              time.Time `json:"created_at"`
}